When blitting inside one window, use ScrollWindowEx, and call
authorTor Lillqvist <tml@src.gnome.org>
Tue, 17 Aug 1999 17:47:14 +0000 (17:47 +0000)
committerTor Lillqvist <tml@src.gnome.org>
Tue, 17 Aug 1999 17:47:14 +0000 (17:47 +0000)
* gdk/win32/gdkdraw.c (gdk_draw_pixmap): When blitting inside one
window, use ScrollWindowEx, and call UpdateWindow. This prevents
bugs when for instance part of the window was outside the
display. Thanks to Philippe Colantoni for finding and fixing this.

ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gdk/win32/gdkdraw.c
gdk/win32/gdkdrawable-win32.c

index eeac154479b25d732e34f5ffef9339fc77016b85..34d8d34fe212379627b9a2ff8fcd1d1665dcfa67 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+1999-08-17  Tor Lillqvist  <tml@iki.fi>
+
+       * gdk/win32/gdkdraw.c (gdk_draw_pixmap): When blitting inside one
+       window, use ScrollWindowEx, and call UpdateWindow. This prevents
+       bugs when for instance part of the window was outside the
+       display. Thanks to Philippe Colantoni for finding and fixing this.
+
 1999-08-16  Tor Lillqvist  <tml@iki.fi>
 
        * gdk/win32/gdkdraw.c (gdk_draw_arc): Fix start and end radial
index eeac154479b25d732e34f5ffef9339fc77016b85..34d8d34fe212379627b9a2ff8fcd1d1665dcfa67 100644 (file)
@@ -1,3 +1,10 @@
+1999-08-17  Tor Lillqvist  <tml@iki.fi>
+
+       * gdk/win32/gdkdraw.c (gdk_draw_pixmap): When blitting inside one
+       window, use ScrollWindowEx, and call UpdateWindow. This prevents
+       bugs when for instance part of the window was outside the
+       display. Thanks to Philippe Colantoni for finding and fixing this.
+
 1999-08-16  Tor Lillqvist  <tml@iki.fi>
 
        * gdk/win32/gdkdraw.c (gdk_draw_arc): Fix start and end radial
index eeac154479b25d732e34f5ffef9339fc77016b85..34d8d34fe212379627b9a2ff8fcd1d1665dcfa67 100644 (file)
@@ -1,3 +1,10 @@
+1999-08-17  Tor Lillqvist  <tml@iki.fi>
+
+       * gdk/win32/gdkdraw.c (gdk_draw_pixmap): When blitting inside one
+       window, use ScrollWindowEx, and call UpdateWindow. This prevents
+       bugs when for instance part of the window was outside the
+       display. Thanks to Philippe Colantoni for finding and fixing this.
+
 1999-08-16  Tor Lillqvist  <tml@iki.fi>
 
        * gdk/win32/gdkdraw.c (gdk_draw_arc): Fix start and end radial
index eeac154479b25d732e34f5ffef9339fc77016b85..34d8d34fe212379627b9a2ff8fcd1d1665dcfa67 100644 (file)
@@ -1,3 +1,10 @@
+1999-08-17  Tor Lillqvist  <tml@iki.fi>
+
+       * gdk/win32/gdkdraw.c (gdk_draw_pixmap): When blitting inside one
+       window, use ScrollWindowEx, and call UpdateWindow. This prevents
+       bugs when for instance part of the window was outside the
+       display. Thanks to Philippe Colantoni for finding and fixing this.
+
 1999-08-16  Tor Lillqvist  <tml@iki.fi>
 
        * gdk/win32/gdkdraw.c (gdk_draw_arc): Fix start and end radial
index eeac154479b25d732e34f5ffef9339fc77016b85..34d8d34fe212379627b9a2ff8fcd1d1665dcfa67 100644 (file)
@@ -1,3 +1,10 @@
+1999-08-17  Tor Lillqvist  <tml@iki.fi>
+
+       * gdk/win32/gdkdraw.c (gdk_draw_pixmap): When blitting inside one
+       window, use ScrollWindowEx, and call UpdateWindow. This prevents
+       bugs when for instance part of the window was outside the
+       display. Thanks to Philippe Colantoni for finding and fixing this.
+
 1999-08-16  Tor Lillqvist  <tml@iki.fi>
 
        * gdk/win32/gdkdraw.c (gdk_draw_arc): Fix start and end radial
index eeac154479b25d732e34f5ffef9339fc77016b85..34d8d34fe212379627b9a2ff8fcd1d1665dcfa67 100644 (file)
@@ -1,3 +1,10 @@
+1999-08-17  Tor Lillqvist  <tml@iki.fi>
+
+       * gdk/win32/gdkdraw.c (gdk_draw_pixmap): When blitting inside one
+       window, use ScrollWindowEx, and call UpdateWindow. This prevents
+       bugs when for instance part of the window was outside the
+       display. Thanks to Philippe Colantoni for finding and fixing this.
+
 1999-08-16  Tor Lillqvist  <tml@iki.fi>
 
        * gdk/win32/gdkdraw.c (gdk_draw_arc): Fix start and end radial
index eeac154479b25d732e34f5ffef9339fc77016b85..34d8d34fe212379627b9a2ff8fcd1d1665dcfa67 100644 (file)
@@ -1,3 +1,10 @@
+1999-08-17  Tor Lillqvist  <tml@iki.fi>
+
+       * gdk/win32/gdkdraw.c (gdk_draw_pixmap): When blitting inside one
+       window, use ScrollWindowEx, and call UpdateWindow. This prevents
+       bugs when for instance part of the window was outside the
+       display. Thanks to Philippe Colantoni for finding and fixing this.
+
 1999-08-16  Tor Lillqvist  <tml@iki.fi>
 
        * gdk/win32/gdkdraw.c (gdk_draw_arc): Fix start and end radial
index 8cc0c4b7ce20af40b1569a0445700ea2d7e8405a..80abf7bcc2652f35d0794d72e984de4684c2f970 100644 (file)
@@ -560,9 +560,30 @@ gdk_draw_pixmap (GdkDrawable *drawable,
       if ((srcdc = GetDC (src_private->xwindow)) == NULL)
        g_warning ("gdk_draw_pixmap: GetDC failed");
       
+#if 0
       if (!BitBlt (hdc, xdest, ydest, width, height,
                   srcdc, xsrc, ysrc, SRCCOPY))
        g_warning ("gdk_draw_pixmap: BitBlt failed");
+#else
+      /* If we are in fact just blitting inside one window,
+       * ScrollWindowEx works better.
+       * Thanks to Philippe Colantoni <colanton@aris.ss.uci.edu>
+       * for noticing and fixing this.
+       */
+      if (drawable_private->xwindow==src_private->xwindow)
+       {
+         if (!ScrollWindowEx (drawable_private->xwindow,-xsrc+xdest, -ysrc+ydest, NULL,
+                              NULL, NULL, NULL, SW_INVALIDATE))
+           g_warning ("gdk_draw_pixmap: ScrollWindowEx failed");
+
+         if (!UpdateWindow (drawable_private->xwindow))
+           g_warning ("gdk_draw_pixmap: UpdateWindow failed");
+       }
+      else
+       if (!BitBlt (hdc, xdest, ydest, width, height,
+                    srcdc, xsrc, ysrc, SRCCOPY))
+         g_warning ("gdk_draw_pixmap: BitBlt failed");
+#endif
       
       ReleaseDC (src_private->xwindow, srcdc);
     }
index 8cc0c4b7ce20af40b1569a0445700ea2d7e8405a..80abf7bcc2652f35d0794d72e984de4684c2f970 100644 (file)
@@ -560,9 +560,30 @@ gdk_draw_pixmap (GdkDrawable *drawable,
       if ((srcdc = GetDC (src_private->xwindow)) == NULL)
        g_warning ("gdk_draw_pixmap: GetDC failed");
       
+#if 0
       if (!BitBlt (hdc, xdest, ydest, width, height,
                   srcdc, xsrc, ysrc, SRCCOPY))
        g_warning ("gdk_draw_pixmap: BitBlt failed");
+#else
+      /* If we are in fact just blitting inside one window,
+       * ScrollWindowEx works better.
+       * Thanks to Philippe Colantoni <colanton@aris.ss.uci.edu>
+       * for noticing and fixing this.
+       */
+      if (drawable_private->xwindow==src_private->xwindow)
+       {
+         if (!ScrollWindowEx (drawable_private->xwindow,-xsrc+xdest, -ysrc+ydest, NULL,
+                              NULL, NULL, NULL, SW_INVALIDATE))
+           g_warning ("gdk_draw_pixmap: ScrollWindowEx failed");
+
+         if (!UpdateWindow (drawable_private->xwindow))
+           g_warning ("gdk_draw_pixmap: UpdateWindow failed");
+       }
+      else
+       if (!BitBlt (hdc, xdest, ydest, width, height,
+                    srcdc, xsrc, ysrc, SRCCOPY))
+         g_warning ("gdk_draw_pixmap: BitBlt failed");
+#endif
       
       ReleaseDC (src_private->xwindow, srcdc);
     }